import type { ForgeConfig } from '@electron-forge/shared-types';
import { MakerSquirrel } from '@electron-forge/maker-squirrel';
import { MakerDMG } from '@electron-forge/maker-dmg';
import { MakerZIP } from '@electron-forge/maker-zip';
//import { MakerDeb } from '@electron-forge/maker-deb';
//import { MakerRpm } from '@electron-forge/maker-rpm';
import { VitePlugin } from '@electron-forge/plugin-vite';
import { FusesPlugin } from '@electron-forge/plugin-fuses';
import { FuseV1Options, FuseVersion } from '@electron/fuses';
import path from 'path';
import dotenv from 'dotenv';

// Load environment variables from .env file
dotenv.config({ quiet: true }); // quiet: true 关闭所有日志输出

const config: ForgeConfig = {
  // 基础打包配置
  packagerConfig: {
    asar: true, // 是否使用asar打包格式
    name:'VChat', // 应用程序的名称
    icon: './assets/icon', // 应用程序的图标路径
    overwrite: true, // 是否覆盖已存在的打包文件
    ignore: [ // 不需要打包的文件和文件夹的路径列表
      // 开发文件和目录
      /^\/\.(idea|git|vscode)(\/|$)/,
      /^\/src\//, // 源码（已编译）

      // 配置文件
      /^\/\.gitignore/,

      // 文档和日志
      /\.(md|markdown|log)$/,

      // 环境文件
      /\.(env|env\.local|env\.\w+)$/,

      // 源码文件（已编译）
      /\.(ts|tsx|js\.map)$/,

      // node_modules 过滤（首次打包时保留完整 node_modules，确认运行正常后再逐步添加忽略规则）
      // /^\/node_modules\/(?!(electron|vue)\/).*/,
    ]
  },
  rebuildConfig: {},
  // 自动识别平台打包对应平台的安装包
  makers: [
    // Windows 安装包
    new MakerSquirrel({
      // 应用信息
      name: 'VChat',
      // 安装包配置
      setupIcon: './assets/icon.ico',  // Windows 安装图标
      iconUrl: 'file://' + path.resolve('./assets/icon.ico'), // 使用本地图标
      // iconUrl: 'https://raw.githubusercontent.com/your-repo/vchat/main/assets/icon.ico', // 远程图标URL
      // 自定义安装程序选项
      setupExe: 'VChat-Setup.exe',  // 安装程序名称
      noMsi: true,
    }),
    // macOS
    new MakerDMG({
      icon: './assets/icon.icns',
      format: 'ULFO'
    }),
    new MakerZIP({}, ['darwin']), // 压缩包，直接解压后就可以运行
    //new MakerRpm({}), // RPM 包 - 用于 Red Hat 系列
    //new MakerDeb({}), // DEB 包 - 用于 Debian 系列
  ],
  publishers: [
    {
      name: '@electron-forge/publisher-github',
      config: {
        repository: {
          owner: 'linkgeek', // github-user-name
          name: 'vchat' // github-repo-name
        },
        prerelease: false,
        draft: true,
        authToken: process.env.GITHUB_TOKEN
      }
    }
  ],
  plugins: [
    new VitePlugin({
      // `build` can specify multiple entry builds, which can be Main process, Preload scripts, Worker process, etc.
      // If you are familiar with Vite configuration, it will look really familiar.
      build: [
        {
          // `entry` is just an alias for `build.lib.entry` in the corresponding file of `config`.
          entry: 'src/main.ts',
          config: 'vite.main.config.ts',
          target: 'main',
        },
        {
          entry: 'src/preload.ts',
          config: 'vite.preload.config.ts',
          target: 'preload',
        },
      ],
      renderer: [
        {
          name: 'main_window',
          config: 'vite.renderer.config.ts',
        },
      ],
    }),
    // Fuses are used to enable/disable various Electron functionality
    // at package time, before code signing the application
    new FusesPlugin({
      version: FuseVersion.V1,
      [FuseV1Options.RunAsNode]: false,
      [FuseV1Options.EnableCookieEncryption]: true,
      [FuseV1Options.EnableNodeOptionsEnvironmentVariable]: false,
      [FuseV1Options.EnableNodeCliInspectArguments]: false,
      [FuseV1Options.EnableEmbeddedAsarIntegrityValidation]: true,
      [FuseV1Options.OnlyLoadAppFromAsar]: true,
    }),
  ],
};

export default config;
